package org.osiris.client.services;

import java.util.Date;
import java.util.List;

import org.osiris.client.model.*;
import org.osiris.persistence.Modificaciondeec;
import org.osiris.persistence.Peticioncambio;
import org.osiris.persistence.Proyecto;
import org.osiris.persistence.Recurso;
import org.osiris.persistence.Relacionrequisito;
import org.osiris.persistence.Requisito;
import org.osiris.persistence.Usuario;


import com.google.gwt.user.client.rpc.AsyncCallback;

/**
 * Authentication service.
 * 
 * @author See Wah Cheng
 * @created 5 Jun 2009
 */
public interface BussinessInterfaceServiceAsync {
	
	public void buscarRequisitos(String autor,
			String descripcion,
			String detallerequisito,
			Date fechaalta,
			Date fechabaja,
			ComplejidadrequisitoViewBean idComplejidadRequisito,
			EstadorequisitoViewBean idEstadoRequisito,
			Long idRequisito,
			CategoriaViewBean subcategoria,
			TipoRequisitoViewBean idTipoRequisito,
			String nombre,
			Integer puntosFuncion,
			String referencia,
			String responsable,
			String origen,
			ProyectoViewBean pr, 
			Long requisito_relacionado,boolean dependencia, AsyncCallback<List<RequisitoViewBean>> callback);
	public void buscarProyectos( String cliente, String descripcion, String estado,Date fechaalta,Long idProyecto,String nombre,String referencia,String usuario, AsyncCallback<List<ProyectoViewBean>> callback);
	public void crearRequisito(
			String referencia,
			Long categoriaBiewBean,
			long estado,
			String puntosFuncion,
			Long usuarioAlta,
			Long responsable,
			Long tipo,
			long subcategoria,
			long complejidad,
			String nombre,
			String version,
			String origen,
			String detalle,
			Long proyecto,
			Long prioridad,
			Long incertidumbre,
			String situacion,String resumen, AsyncCallback<RequisitoViewBean> callback);
	public void crearProyecto(String cliente, String descripcion,
			String estado, String nombre, String referencia,
			String usuario_resposanble,String usuario_alta,String resumen, AsyncCallback<ProyectoViewBean> callback);
	public void modificarProyecto(ProyectoViewBean proyecto, AsyncCallback<Boolean> callback);
	
	
	
	/*RIESGOS*/
	public void getRiesgosRequisito(Long requisito, AsyncCallback<List <RiesgoViewBean>> callback);
	public void asociarRiesgoARequisito(Long requisito,String descripcion,String nombre, Long usuario, String impacto, String probabilidad, AsyncCallback<RiesgoViewBean> callback);
	public void desasociarRiesgoARequisito(Long requisito,Long riesgo, AsyncCallback<Boolean> callback);
	
	
	public void getDependenciasRequisito(RequisitoViewBean requisito, AsyncCallback<List <RequisitoViewBean>> callback);
	
	
	public  void crearDependenciaRequisito(RequisitoViewBean requisito,RequisitoViewBean nueva_dependencia, AsyncCallback<Boolean> callback);
	public  void eliminarDependenciaRequisito(RequisitoViewBean requisito,RequisitoViewBean nueva_dependencia, AsyncCallback<Boolean> callback);
	
	public void getRequisitosProyecto(ProyectoViewBean proy, AsyncCallback<List<RequisitoViewBean>> callback);
	public void asociarRequisitoAProyecto(ProyectoViewBean proy,RequisitoViewBean req,Long prioridad,Long inceryidumbre,Long estado, AsyncCallback<Boolean> callback);
	public void desasociarRequisitoAProyecto(ProyectoViewBean proy,RequisitoViewBean req, AsyncCallback<Boolean> callback);
	public void getVersionesRequisito(RequisitoViewBean req, AsyncCallback<List <RequisitoViewBean>> callback);
	public void getRecursosRequisito(RequisitoViewBean req, AsyncCallback<List <RequisitoViewBean>> callback);
	
    void altaPeticionCambio(UsuarioViewBean autor,ComplejidadrequisitoViewBean complejidad,String descripcion,Double esfuerzo,EstadorequisitoViewBean estado,List<RequisitoViewBean>  impactos,Long idPeticion,IncertidumbreViewBean incertidumbre,String motivo,String origen,PrioridadViewBean prioridad,List<RecursoViewBean> recursos, AsyncCallback<Boolean> callback);
    
    void buscarPeticionCambio(Long id,
                                String texto,
                                Long usuario,
                                Long requisito,
                                Long proyecto,
                                Date desde, Date hasta,
                                Long incertidumbre,
                                Long prioridad,
                                Long estado,
                                Long complejidad, AsyncCallback<List<PeticionCambioViewBean>> callback);

    void modificarPeticionCambio(PeticionCambioViewBean p, AsyncCallback<Boolean> callback);
    
    
    void altaRecursoAPeticion(PeticionCambioViewBean p,RecursoViewBean r, AsyncCallback<Boolean> callback);
    void bajaRecursoAPeticion(PeticionCambioViewBean p,RecursoViewBean r, AsyncCallback<Boolean> callback);
    
    void altaRecurso(String nombre,String referenmcia,String  filename,String descripcion,TipoRecursoViewBean subtipo, AsyncCallback<RecursoViewBean> callback);
    void modificarRecurso(RecursoViewBean r, AsyncCallback<Boolean> callback);
    
    
    void asignarRecursoARequisito(RequisitoViewBean p,RecursoViewBean r, AsyncCallback<Boolean> callback);
    void desasignarRecursoARequisito(RequisitoViewBean p,RecursoViewBean r, AsyncCallback<Boolean> callback);
    

    void buscarRecurso(Long id,
                                Long idtipo,
                                Long idsubtipo,
                                String filename,
                                String nombre,
                                String referencia,
                                String descripcion, AsyncCallback<List <RecursoViewBean>> callback);
    void getTiposRecurso(AsyncCallback<List <TipoRecursoViewBean>> callback);
	void getIncertidumbres(AsyncCallback<List <IncertidumbreViewBean>> callback);
	void getPrioridades(AsyncCallback<List <PrioridadViewBean>> callback);
	void getCategorias(AsyncCallback<List <CategoriaViewBean>> callback);
	void getSubCategorias(CategoriaViewBean cat, AsyncCallback<List <CategoriaViewBean>> callback);
	void getEstadosRequisito(AsyncCallback<List <EstadorequisitoViewBean>> callback);
	void getComplejidadRequisito(AsyncCallback<List <ComplejidadrequisitoViewBean>> callback);
	void getTipos(AsyncCallback<List <org.osiris.client.model.TipoRequisitoViewBean>> callback);
	void  getUsuarios(AsyncCallback<List <org.osiris.client.model.UsuarioViewBean>> callback);
	void  getProyectos(AsyncCallback<List <org.osiris.client.model.ProyectoViewBean>> callback);
	void  getEstadoProyectoViewBean(AsyncCallback<List <org.osiris.client.model.EstadoProyectoViewBean>> callback);
	
}
